在這一篇主要講了Node 在終機端和腳本文件this不同的指向,那麼今天要來簡單介紹Nodejs作用域的種類,但今天討論的只限於在腳本文件的環境下
。
定義在全局作用域上的變量可通過global對象上抓取到。
換個方式說,如果今天變量沒有使用const
、var
、let
…等關鍵字來定義的話,
它就屬於全局作用域。像是 :
//全局作用域
nicole=1000;
console.log("global對象的結果是 "+ global.nicole);
nicole變量是由global定義而成,而nicole變量是在全局作用域之中,
所以就算是在不同的檔案文件也能被拜訪到。
比如說在名為 作用域.js
這個檔案上,寫上
nicole=1000;
再創另一個檔案名為 我是另一個檔案.js
用require
調用nicole這個變量
//全局作用域調用變量
require('./作用域.js');
console.log(nicole);
執行結果:
在每個檔案文件定義於var
、let
、const
的變量都是位於模塊作用域中,
而每個檔案都是一組模塊,各自獨立運作,不同模塊作用域之間都是區隔開的,
模塊中的this指向module.exports
。
//模塊作用域
this.nicole=8000;
console.log(module.exports);
塊作用基本在每個程式語言都有塊作用域,
就像是C#語言的if判斷語句或是for迴圈等語句都是。
在ES5中只有全局作用域與函數作用域。
若假設已經有一個nicole變量屬於全局作用域
var nicole="Nicole";
這個變量可以在同一個檔案中任一位置被訪問到。
若還有需要在建立一個新的作用域,就建立一個新的函數來實現。
//新函數創建新的作用域
var nicole="LOVE";
function newNicole()
{
var nicole="MYSELF";
console.log("新作用域: "+nicole);
}
newNicole();
console.log(nicole);
執行結果:
雖然變量名稱是相同的,但是這兩個nicole個屬於兩個不同的作用域,
在函數中的作用域,不會影響到全局變量。